NullPointerException
Optional ক্লাসটি Java 8 এ পরিচিতি পায় এবং এটি মূলত null চেকিং সমস্যা সমাধানের জন্য ডিজাইন করা হয়েছে। এটি একটি wrapper ক্লাস যা null না থাকা মানের জন্য একটি অবজেক্ট ধারণ করতে পারে এবং null মানের জন্য একটি নিরাপদ বিকল্প প্রদান করে। এর মাধ্যমে NullPointerException প্রতিরোধ করা সম্ভব হয়।
Optional Class: Key Features
Optionalএকটি container অবজেক্ট যা মূলতnullবা non-nullমান ধারণ করতে পারে।Optionalব্যবহার করে আমরাnullচেক করা এবংNullPointerExceptionথেকে বাঁচা সহজ করে ফেলি।
Optional Class Example:
এখানে একটি উদাহরণ দেওয়া হলো, যেখানে Optional ব্যবহার করা হয়েছে null চেকিং এবং NullPointerException প্রতিরোধের জন্য।
১. ক্লাস এবং মেথড তৈরি:
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
// উদাহরণ 1: null চেক করার জন্য Optional ব্যবহার
String name = "John Doe";
Optional<String> optionalName = Optional.ofNullable(name);
// Optional এর মাধ্যমে null চেক করা
optionalName.ifPresent(n -> System.out.println("নাম: " + n));
// উদাহরণ 2: null চেক না করে মান নেওয়া
String result = optionalName.orElse("নাম পাওয়া যায়নি");
System.out.println("ফলাফল: " + result);
// উদাহরণ 3: Optional এর মাধ্যমে null চেক এবং ডিফল্ট মান নির্ধারণ করা
String nullName = null;
Optional<String> optionalNullName = Optional.ofNullable(nullName);
// Optional থেকে null থাকলে ডিফল্ট মান দেওয়া
String result2 = optionalNullName.orElse("নাম পাওয়া যায়নি");
System.out.println("ফলাফল: " + result2);
// উদাহরণ 4: Optional এর মাধ্যমে Exeption handling করা
String nameFromOptional = optionalNullName.orElseThrow(() -> new IllegalArgumentException("নাম অনুপস্থিত"));
System.out.println("নাম: " + nameFromOptional); // এটি এক্সসেপশন ছুঁড়ে দিবে
}
}
Code Explanation:
Optional.ofNullable(): এই মেথডটি একটিOptionalঅবজেক্ট তৈরি করে যা একটিnullবা non-nullভ্যালু ধারণ করতে পারে।ifPresent(): যদি মানটি non-null হয়, তবে এটিifPresentমেথডের ল্যাম্বডা এক্সপ্রেশন (অথবা কোড ব্লক) রান করবে।orElse(): এটিOptionalঅবজেক্টের মধ্যে একটি মান থাকলে তা রিটার্ন করবে, এবং যদি মানটি null হয়, তবে একটি ডিফল্ট মান প্রদান করবে।orElseThrow(): এটিOptionalঅবজেক্টের মধ্যেnullথাকলে একটি কাস্টম এক্সসেপশন ছুঁড়ে দেবে।
Output:
নাম: John Doe
ফলাফল: John Doe
ফলাফল: নাম পাওয়া যায়নি
Exception in thread "main" java.lang.IllegalArgumentException: নাম অনুপস্থিত
at OptionalExample.main(OptionalExample.java:22)
Optional ক্লাসের আরও কিছু সাধারণ ব্যবহার:
২. isPresent() এবং get() মেথড ব্যবহার:
Optional<String> optional = Optional.of("Java");
if (optional.isPresent()) {
System.out.println("মান পাওয়া গেছে: " + optional.get());
} else {
System.out.println("মান পাওয়া যায়নি");
}
৩. map() এবং flatMap() মেথড ব্যবহার:
map() মেথডটি যদি Optional অবজেক্টে মান থাকে, তবে তা একটি ফাংশন প্রয়োগ করে নতুন Optional তৈরি করবে।
Optional<String> nameOptional = Optional.of("John");
Optional<String> upperName = nameOptional.map(String::toUpperCase);
System.out.println(upperName.get()); // Output: JOHN
Optional Class এর সুবিধা:
- NullPointerException থেকে রক্ষা:
Optionalব্যবহার করে সহজেইnullচেক করা যায় এবংNullPointerExceptionকমানো যায়। - কোডের ক্লিনলিনেস:
Optionalব্যবহার করে কোডেnullচেক করার জন্য অতিরিক্ত if-else স্টেটমেন্ট কমানো যায়। - কমপ্লেক্স ভ্যালু ট্রান্সফর্মেশন:
Optionalব্যবহার করে chainable মেথড (যেমনmap(),flatMap()) ব্যবহার করে কমপ্লেক্স অপারেশন করা যায়।
Optional Class এর সীমাবদ্ধতা:
- অতিরিক্ত ওভারহেড: যদি খুব সাধারণ প্রোগ্রামে ব্যবহার করা হয়, তবে
Optionalকিছুটা অতিরিক্ত ওভারহেড তৈরি করতে পারে, বিশেষত যখন সিঙ্গল ভ্যালুর সাথে কাজ করা হয়। - প্রতিটি ক্ষেত্রে ব্যবহার নয়:
Optionalশুধুমাত্র ঐ ক্ষেত্রে ব্যবহার করা উচিত যেখানেnullএর প্রভাব থাকে, যেমন ফাংশনেnullফেরত দেওয়া বা মানের অনুপস্থিতি।
Optional ক্লাস Java 8 এ একটি শক্তিশালী টুল হিসেবে পরিচিত, যা NullPointerException প্রতিরোধ এবং নিরাপদভাবে null চেক করার সুযোগ দেয়। এটি null মান নিয়ে কাজ করার সময় কোডের দক্ষতা এবং পঠনযোগ্যতা বৃদ্ধি করে।
Read more